/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package raccoon.suvisa.datos.fachadas.beans;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import raccoon.suvisa.datos.fachadas.*;
import javax.ejb.Stateless;
import java.util.logging.Logger;
import java.util.List;
import raccoon.suvisa.datos.entities.Tarjeta;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import raccoon.suvisa.datos.entities.Control;
import raccoon.suvisa.datos.entities.Entidad;
import raccoon.suvisa.datos.entities.TipoTarjeta;

/**
 *
 * @author Gabriel
 */
@Stateless
public class TarjetaBean implements TarjetaRemote {

    @PersistenceContext
    private EntityManager em;

    @Override
    public Tarjeta getTarjeta(BigDecimal idTarjeta) {
        try {
            List lst = em.createNamedQuery("Tarjeta.findByIdTarjeta").setParameter("idTarjeta", idTarjeta).getResultList();
            if (!lst.isEmpty()) {
                Tarjeta t = (Tarjeta) lst.get(0);
                return t;
            }
        } catch (Exception e) {
            Logger.getLogger(TarjetaBean.class.getName()).info("ERROR!!!" + e.toString());
        }
        return null;
    }

    @Override
    public BigDecimal guardarNuevaTarjeta(Tarjeta tarjeta) {

        try {
            BigInteger id = new BigInteger("0");
            List lst = em.createNamedQuery("Control.findByLlave").setParameter("llave", 'K').getResultList();
            if (!lst.isEmpty()) {
                BigDecimal idCuenta = new BigDecimal(tarjeta.getIdCuenta());
                BigDecimal idTipoTarjeta = new BigDecimal(tarjeta.getIdTipoTarjeta());
                BigDecimal idEntidad = new BigDecimal(tarjeta.getIdEntidad().toString());
                if (existeCuenta(idCuenta) == true && existeTipoTarjeta(idTipoTarjeta) == true && existeEntidad(idEntidad) == true) {
                    Control con = (Control) lst.get(0);
                    id = con.getIdTarjeta();
                    con.setIdTarjeta(id.add(BigInteger.ONE));
                    em.merge(con);
                    tarjeta.setIdTarjeta(new BigDecimal(id.add(BigInteger.ONE).toString()));
                    tarjeta.setActiva('V');
                    em.persist(tarjeta);
                }
                return tarjeta.getIdTarjeta();
            } else {
                return BigDecimal.ONE;
            }
        } catch (Exception e) {
            Logger.getLogger(TarjetaBean.class.getName()).info("ERROR!!!" + e.toString());
            return BigDecimal.ZERO;
        }

    }

    @Override
    public boolean actualizarTarjeta(Tarjeta tarjeta) {
        try {
            em.merge(tarjeta);
            return true;
        } catch (Exception e) {
            Logger.getLogger(TarjetaBean.class.getName()).info("ERROR!!!" + e.toString());
        }
        return false;
    }

    @Override
    public boolean validarZona(BigDecimal idTarjeta, String Zona) {
        try {
            List lst = em.createNamedQuery("Tarjeta.findByIdTarjeta").setParameter("idTarjeta", idTarjeta).getResultList();
            if (!lst.isEmpty()) {
                Tarjeta t = (Tarjeta) lst.get(0);
                if (t.getPaisexpedicion().equalsIgnoreCase(Zona)) {
                    return true;
                } else {
                    return false;
                }
            }
        } catch (Exception e) {
            Logger.getLogger(TarjetaBean.class.getName()).info("ERROR!!!" + e.toString());
        }
        return false;
    }

    @Override
    public boolean validarSaldo(BigDecimal idTarjeta, float montoTransaccion) {
        try {
            Logger.getLogger(TarjetaBean.class.getName()).info("ENTRE a validarZona");
            List lst = em.createNamedQuery("Tarjeta.findByIdTarjeta").setParameter("idTarjeta", idTarjeta).getResultList();
            if (!lst.isEmpty()) {
                Tarjeta t = (Tarjeta) lst.get(0);
                if (t.getSaldo() >= montoTransaccion) {
                    return true;
                } else {
                    return false;
                }
            }
        } catch (Exception e) {
            Logger.getLogger(TarjetaBean.class.getName()).info("ERROR!!!" + e.toString());
        }
        return true;
    }

    @Override
    public Double consultarCupo(BigDecimal idTarjeta) {
        Double res = 0.0;
        try {
            List lst = em.createNamedQuery("Tarjeta.findByIdTarjeta").setParameter("idTarjeta", idTarjeta).getResultList();
            if (!lst.isEmpty()) {
                Tarjeta t = (Tarjeta) lst.get(0);
                res = t.getSaldo();
            }
            return res;
        } catch (Exception e) {
            Logger.getLogger(TarjetaBean.class.getName()).info("ERROR!!!" + e.toString());
            return res;
        }

    }

    @Override
    public boolean existeCuenta(BigDecimal idCuenta) {
        try {
            List lst = em.createNamedQuery("Cuenta.findByIdCuenta").setParameter("idCuenta", idCuenta).getResultList();
            if (!lst.isEmpty()) {
                return true;
            } else {
                return false;
            }
        } catch (Exception e) {
            return false;
        }
    }

    @Override
    public boolean existeTipoTarjeta(BigDecimal idTipotarjeta) {
        try {
            List lst = em.createNamedQuery("TipoTarjeta.findByIdTipotarjeta").setParameter("idTipotarjeta", idTipotarjeta).getResultList();
            if (!lst.isEmpty()) {
                TipoTarjeta t = (TipoTarjeta) lst.get(0);
                return true;
            } else {
                return false;
            }
        } catch (Exception e) {
            Logger.getLogger(TarjetaBean.class.getName()).info("ERROR!!!" + e.toString());
            return false;
        }
    }

    @Override
    public boolean existeEntidad(BigDecimal idEntidad) {
        try {
            List lst = em.createNamedQuery("Entidad.findByIdEntidad").setParameter("idEntidad", idEntidad).getResultList();
            if (!lst.isEmpty()) {
                Entidad en = (Entidad) lst.get(0);
                return true;
            }
            return false;
        } catch (Exception e) {
            Logger.getLogger(TarjetaBean.class.getName()).info("ERROR!!!" + e.toString());
            return false;
        }
    }

    @Override
    public List<Tarjeta> getAll() {
        try {
            List lst = em.createNamedQuery("Tarjeta.findAll").getResultList();
            if (!lst.isEmpty()) {
                return lst;
            }
        } catch (Exception e) {
            Logger.getLogger(TarjetaBean.class.getName()).info("ERROR!!!" + e.toString());
        }
        return new ArrayList<Tarjeta>();
    }
}

